use sea_orm::DatabaseConnection;
use tracing::info;

use super::dict_service::DictService;

/// 基础设施服务管理器 - 统一管理所有 Infra 服务实例
/// 负责字典、文件、通知、黑名单等基础设施服务的管理
#[derive(Clone)]
pub struct ServiceManager {
    /// 字典服务
    pub dict: DictService,
    /// 配置服务（暂时使用字典服务替代，后续单独实现）
    pub config: DictService,
    // 文件服务（待实现）
    // pub file: FileService,
    // 通知服务（待实现）
    // pub notification: NotificationService,
    // 黑名单服务（待实现）
    // pub blacklist: BlacklistService,
}

impl ServiceManager {
    /// 创建新的基础设施服务管理器实例
    /// 统一初始化所有 infra 服务，确保使用相同的数据库连接
    pub fn new(db: DatabaseConnection) -> Self {
        info!("🚀 初始化基础设施服务管理器，创建所有服务实例");
        
        Self {
            dict: DictService::new(db.clone()),
            config: DictService::new(db), // 暂时复用字典服务
        }
    }

    /// 记录操作日志的通用方法
    pub async fn log_operation(&self, operation: &str, details: &str) -> Result<(), tonic::Status> {
        info!("记录基础设施操作日志: operation={}, details={}", operation, details);
        
        // 这里可以添加实际的日志记录逻辑
        // 例如：插入操作日志表、发送到日志服务等
        
        Ok(())
    }

    /// 检查服务健康状态
    pub async fn health_check(&self) -> std::collections::HashMap<String, bool> {
        let mut status = std::collections::HashMap::new();
        
        // 检查字典服务
        status.insert("dict".to_string(), true);
        
        // 检查配置服务
        status.insert("config".to_string(), true);
        
        // TODO: 添加其他服务的健康检查
        // status.insert("file".to_string(), self.file.is_healthy().await);
        // status.insert("notification".to_string(), self.notification.is_healthy().await);
        // status.insert("blacklist".to_string(), self.blacklist.is_healthy().await);
        
        info!("基础设施服务健康检查完成: {:?}", status);
        status
    }
}